/*
 * @Description: 项目的核心文件
 * @Author: 0001100986/LiuShuai
 * @Date: 2021-06-22 14:09:49
 * @LastEditTime: 2021-10-20 09:19:59
 * @LastEditors: 0001100986/LiuShuai
 */
/* eslint-disable no-new */
import Vue from 'vue';
import App from './App';
import router from './router';
import store from './store';
// 重置HTML样式
import '@styles/reset.scss';
// 全局样式
import '@styles/app.scss';
// 优化element样式
import '@styles/el-ui.scss';
// 暗黑主题
import '@styles/dark.scss';
// 系统图标
import '@icons/system/iconfont.css';
// 系统彩色图标
import '@icons/system/iconfont.js';
// 系统提供的图标库
import '@icons/icons/iconfont.css';
// 自定义的图标库
import '@icons/custom/iconfont.css';
// 自定义的图标库
import '@icons/custom/iconfont.js';
// 组件库
import ElementUI from 'element-ui';
// 滚动插件
import vuescroll from 'vuescroll';
// 多语言
import i18n from './lang/i18n';
// 注册全局组件
import components from '@/components';
// 注册自定义指令
import directives from '@/utils/directives';
// 注册全局过滤器
import filter from '@/utils/filter';
// Excel导出
import JsonExcel from 'vue-json-excel';
// Axios请求
import http from '@/utils/request';
// WebSocket请求
import ws from '@/utils/websocket';
// 穿梭框
import krryTransfer from 'krry-transfer';
// webMonitor监控信息
import { monitor } from '@/utils/monitor';
monitor();

// Axios
Vue.prototype.$http = http;
// WebSocket
Vue.prototype.$ws = ws;
// BUS
const bus = (Vue) => { Vue.prototype.$bus = new Vue() };

// 全局导入自定义组件
Vue.use(components);
// 全局导入自定义指令
Object.keys(directives).forEach(fncName => Vue.directive(fncName, directives[fncName]));
// 全局导入过滤器
Object.keys(filter).forEach(key => Vue.filter(key, filter[key]));

// 全局设置element组件默认大小
Vue.use(ElementUI, { size: 'default', zIndex: 3000 });
// 虚拟滚动条
Vue.use(vuescroll);
// Excel导出组件
Vue.component('downloadExcel', JsonExcel);
// Echarts组件
// eslint-disable-next-line no-undef
Vue.prototype.$echarts = echarts;
// 穿梭框组件
Vue.use(krryTransfer);
// BUS总线
Vue.use(bus);

// 阻止启动生产消息
Vue.config.productionTip = false;

new Vue({
  el: '#app',
  router,
  store,
  i18n,
  components: { App },
  template: '<App/>'
});
